package br.ufscar.acumaaf.smc.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ListView;

import br.ufscar.acumaaf.smc.adapter.AdaptadorListaUsuariosPorSessao;
import br.ufscar.acumaaf.smc.dao.MatriculaUsuarioGrupoAtividadeFisicaDAO;
import br.ufscar.acumaaf.smc.dao.SessaoDAO;
import br.ufscar.acumaaf.smc.dao.UsuarioDAO;
import br.ufscar.acumaaf.smc.model.MatriculaUsuarioGrupoAtividadeFisica;
import br.ufscar.acumaaf.smc.model.Sessao;
import br.ufscar.acumaaf.smc.model.Usuario;

public class GerenciaSessaoAtividadeFisica extends ListActivity{
	
	private List<MatriculaUsuarioGrupoAtividadeFisica> listaMatriculas;
	private List<Usuario> listaUsuarios;
	AlertDialog.Builder builder;
	AlertDialog alert;
	
	private Integer codigoSessao;
	private Integer codigoGrupoAtividadeFisica;
			
	public void onCreate(Bundle b){
		super.onCreate(b);
		
		builder = new AlertDialog.Builder(this);
		
		//Chama o método para montar a lista de Usuários matriculados na Sessão de Atividade Física selecionada
		criaListaUsuariosPorSessao();
	}

	private void criaListaUsuariosPorSessao() {
		
		listaMatriculas = new ArrayList<MatriculaUsuarioGrupoAtividadeFisica>();
		listaUsuarios = new ArrayList<Usuario>();
		codigoSessao = null;
		codigoGrupoAtividadeFisica = null;
		Bundle extras = getIntent().getExtras();
		//Recupera o parâmetro passado pela Activity GerenciaAtividadeFisica
		if(extras != null){
			codigoSessao = extras.getInt("codigosessao");
			codigoGrupoAtividadeFisica = extras.getInt("codigogrupoatividadefisica");
			if(codigoGrupoAtividadeFisica != null){
				listaMatriculas = (List<MatriculaUsuarioGrupoAtividadeFisica>) new MatriculaUsuarioGrupoAtividadeFisicaDAO(this).buscarTodasMatriculasPeloCodigoGrupoAtividadeFisica(codigoGrupoAtividadeFisica);
			}
		}
		
		for (MatriculaUsuarioGrupoAtividadeFisica mat : listaMatriculas) {
			Usuario usuario = new Usuario();
			usuario = new UsuarioDAO(getApplicationContext()).buscarUsuarioPeloCodigo(mat.getCodigoUsuario());
			listaUsuarios.add(usuario);
		}
		setListAdapter(new AdaptadorListaUsuariosPorSessao(this, listaUsuarios, codigoSessao));
	}
	
	//Método que captura o item da lista que o usuário clicou
	protected void onListItemClick(ListView l, View v, int position, long id){
		super.onListItemClick(l, v, position, id);
		//Recupera o Usuário Selecionado
		Usuario usuario = listaUsuarios.get(position);
		Intent it = new Intent("CHAMA_ACTIVITY_REGISTRA_DADOS_USUARIO");
		it.putExtra("codigosessao", codigoSessao);
		it.putExtra("codigousuario", usuario.getCodigoUsuario());
		startActivityForResult(it, 1);
	}
	
	protected void onActivityResult(int codigo, int codigoRetorno, Intent it){
		super.onActivityResult(codigo, codigoRetorno, it);
		//Quando a Activity RegistraDadosSessaoUsuario retornar, atualiza a lista com os valores já registrados
		if(codigoRetorno == RESULT_OK){
			criaListaUsuariosPorSessao();
		}
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event){
		
		if(keyCode == KeyEvent.KEYCODE_BACK){
			builder.setMessage("Deseja finalizar a sessão de Atividade Física e enviar os dados para o SIAF?");
			builder.setCancelable(false);
			builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					Sessao sessao = new Sessao();
					sessao = new SessaoDAO(getApplicationContext()).buscarSessaoPeloCodigo(codigoSessao);
					sessao.setSincronizar(1);
					boolean atualizou = new SessaoDAO(getApplicationContext()).atualizaSessao(sessao);
					if(atualizou){
						Log.i("smc","GerenciaSessaoAtividadeFisica:EncerrarSessao:SIM - atualizou = " + atualizou);
						startService(new Intent("INICIAR_SERVICO_SINCRONIZACAO_DADOSESSAO"));
					}
					finish();
				}
			});
			builder.setNegativeButton("Não", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					Log.i("smc", "Entrou no metodo do botao back e pressionou NAO");
					finish();
				}
			});
		}
		alert = builder.create();
		alert.show();
		return super.onKeyDown(keyCode, event);
	}
}